<?php

namespace app\controller;

use support\Request;
use Kingbes\Attribute\Annotation;
use app\model\Menu;
use app\common\Tool;
use app\common\Tree;

#[Annotation(title: "菜单组", auth: true)]
class MenuController
{
    #[Annotation(title: "路由名")]
    public function route_name(Request $request)
    {
        // 注解数据
        $Annotation = Annotation::data("app");
        $type = $request->get("type") == "菜单" ? "view" : "auth";
        foreach ($Annotation as $key => $value) {
            if (!$value["auth"]) {
                unset($Annotation[$key]);
            } else {
                foreach ($value["methods"] as $k => $v) {
                    if (!$v[$type]) {
                        unset($Annotation[$key]["methods"][$k]);
                    }
                }
            }
        }
        // 返回数据
        return success(msg: "获取成功", data: $Annotation);
    }

    #[Annotation(title: "查询", view: true)]
    public function query(Request $request)
    {
        // 提交
        if ($request->method() === "POST") {
            // 数据
            $param = $request->all();
            // 查询
            $res = Tool::search(Menu::class, $param)->select();
            // 树形
            $Tree = new Tree($res->toArray());
            // 返回
            return json([
                "code" => 0,
                "msg" => "获取成功",
                "count" => count($res),
                "data" => $Tree->buildTree(),
            ]);
        }
        // 输出模板
        return fetch();
    }

    #[Annotation(title: "新增", view: true, auth: true)]
    public function add(Request $request)
    {
        // 提交
        if ($request->method() === "POST") {
            // 数据
            $data = $request->all();
            // 新增
            $res = Menu::create($data);
            // 返回
            return success(msg: "新增成功", data: $res);
        }
        // 输出模板
        return fetch();
    }

    #[Annotation(title: "编辑", auth: true)]
    public function edit(Request $request)
    {
        // 查找
        $find = Menu::find($request->get("id"));
        // 赋值模板
        assign("find", $find);
        // 提交
        if ($request->method() === "POST") {
            // 数据
            $data = $request->all();
            // 更新数据
            $res = Menu::update($data);
            // 返回
            return success(msg: "编辑成功", data: $res);
        }
        // 输出模板
        return fetch();
    }

    #[Annotation(title: "删除", auth: true)]
    public function del(Request $request)
    {
        // 数据
        $ids = $request->get("ids");
        // 删除
        $destroy = Menu::destroy($ids);
        // 返回
        if ($destroy) {
            return success("删除成功");
        } else {
            return error(msg: "删除失败", data: $ids);
        }
    }
}
